/**
 * 向服务器发送请求，获取用户的信息
 * 用户的信息会被存到vue中的data中的一个叫做userInfo的属性中
 * 在callback中传递的用户的信息，也可以通过这个获取
 * 使用方法：
 * created() { // 这是vue中的钩子函数，在vue创建完毕后执行
 *     getUserInfoFromServer(this, (result)=> {
 *         console.log("这里也可以获得数据：" + result);
 *     });
 * 
 *     // 如果不写回调，可以这样用
 *     getUserInfoFromServer(this);
 * }
 * @param {vue} vueData vue中的this
 * @param {function} success 获取用户信息成功的回调方法，可省略
 * @param {function} error 获取用户信息失败（用户未登录）的回调方法，可省略
 */
function getUserInfoFromServer(vueData, success, error) {
    console.log("正在获取用户信息...");
    axios.get(addressUCGetUserFromRedisByToken, {})
        .then((result) => {
            console.log("获取到用户信息：");
            console.log(result.data);
            if (result.data.flag) {
                vueData.userInfo = result.data.data;
                if (!(typeof eval(success) === "undefined")) {
                    success(result);
                }
            } else { // 用户未登录
                console.log("用户未登录");
                if (!(typeof eval(error) === "undefined")) {
                    error(result);
                }
            }
        });
}

/**
 * 从服务器获取所有的公告信息，将公告信息以参数的形式返回
 * 注意，这是一个异步操作
 * 
 * @param {对象} vueData 公告信息数据在这里返回，返回给vueData.noticeList
 * @param {function(result)} success 响应成功的回调函数
 */
function getNoticeListFromServer(vueData, success) {
    axios.get(addressNCGerAll).then((result) => {
        if (result.data.flag) {
            let noticeListTemp = result.data.data;
            vueData.noticeList = noticeListTemp; // 将数据返回
            // 这是返回成功后的回调函数
            if (!(typeof eval(success) === "undefined")) {
                success(result);
            }

        } else {
            console.log("公告获取错误！");
        }
    });
}

/**
 * 从服务器分页查询帖子，设置到data中的postPageInfo
 * @param {Object} vueData vue中的data
 * @param {number} pageNum 第几页
 * @param {number} pageSize 每一页多少条
 * @param {number} isCollectionLimit -1、null或者不传递表示不对收藏做限制，1表示只查询收藏，0表示只查询未收藏
 * @param {function(result)} success 成功后的回调
 */
function getPostPageFromServer(vueData, pageNum, pageSize, isCollectionLimit, success) {
    let urlParameter = "?pageNum=" + pageNum + "&pageSize=" + pageSize;
    if (isCollectionLimit != null && isCollectionLimit != -1) {
        urlParameter = urlParameter + "&isCollectionLimit=" + isCollectionLimit;
    }
    axios.get(addressPCPage + urlParameter).then((result) => {
        if (result.data.flag) {
            if (vueData != null) {
                vueData.postPageInfo = result.data.data; // 将数据返回
            }
            // 这是返回成功后的回调函数
            if (!(typeof eval(success) === "undefined")) {
                success(result);
            }
        } else {
            console.log("帖子列表获取错误！");
        }
    });
}

/**
 * 抽取奶盒空间帖子点赞功能
 * @param {Object} vueData vue中的data
 * @param {Object} post 当前被点赞的帖子信息
 */
function postPraise(vueData, post) {
    vueData.postChangingId = post.id; // 选中正在被点赞的帖子，令其禁用，防止用户重复点击
    axios.get(addressPLCLikeOrCancel + "?postId=" + post.id).then((result) => {
        if (result.data.flag) {
            if (post.isLike) { // 已经点赞了，准备取消点赞
                post.likeCount--;
            } else { // 没有点赞，准备点赞
                post.likeCount++;
            }
            post.isLike = !post.isLike;
            vueData.$notify({ title: "成功-testtest", message: result.data.message, type: "success" });
        } else {
            vueData.$notify.error({ title: "错误", message: result.data.message });
        }
        vueData.postChangingId = -1; // 解除禁用
    });
}

// /**
//  * 
//  * @param {*} vueData 
//  * @param {*} post 
//  */
// function postCollect(vueData, post) {
//     vueData.postChangingId = post.id;
//     if (post.isCollection) { // 取消收藏操作
//         axios.delete(addressPCCCancelCollection + "?postId=" + post.id).then((result) => {
//             if (result.data.flag) {
//                 post.collectionCount--;
//                 post.isCollection = !post.isCollection;
//                 vueData.$notify({ title: "成功", message: result.data.message, type: "success" });
//             } else {
//                 vueData.$notify.error({ title: "错误", message: result.data.message });
//             }
//             vueData.postChangingId = -1;
//         });
//     } else { // 收藏操作
//         axios.post(addressPCCCollection, post).then((result) => {
//             if (result.data.flag) {
//                 post.collectionCount++;
//                 post.isCollection = !post.isCollection;
//                 vueData.$notify({ title: "成功", message: result.data.message, type: "success" });
//             } else {
//                 vueData.$notify.error({ title: "错误", message: result.data.message });
//             }
//             vueData.postChangingId = -1;
//         });
//     }
// }

/**
 * 获取url参数，如果没有url参数或当前参数不存在则返回null
 * @param {String} parmeter 参数名
 * @returns 参数值
 */
function getParameter(parmeter) {
    let url = decodeURI(location.search);
    let parmeterString = url.split("?")[1];
    if (typeof parmeterString == "undefined") {
        return null;
    }
    let parmeterMapList = parmeterString.split("&");
    for (let i = 0; i < parmeterMapList.length; i++) {
        let keyAndValue = parmeterMapList[i].split("=");
        if (keyAndValue[0] == parmeter) {
            return keyAndValue[1];
        }
    }
    return null;
}

/**
 * 将文本放入剪贴板
 * @param {string} text 文本
 * @returns 成功返回true
 */
function commonCopy(text = '') {
    let input = document.createElement('input')
    input.style.position = 'fixed'
    input.style.top = '-10000px'
    input.style.zIndex = '-999'
    document.body.appendChild(input)
    input.value = text
    input.focus()
    input.select()
    try {
        let result = document.execCommand('copy')
        document.body.removeChild(input)
        if (!result || result === 'unsuccessful') {
            console.log('复制失败');
            return false;
        } else {
            console.log('复制成功');
            return true;
        }
    } catch (e) {
        document.body.removeChild(input)
        console.log('当前浏览器不支持复制功能，请检查更新或更换其他浏览器操作');
        return false;
    }
}